Uitwisselprofiel Zorgkantoren Inkoopondersteuning en beleidsontwikkeling

Over Uitwisselprofiel Zorgkantoren Inkoopondersteuning en beleidsontwikkeling


Publicatiedatum:
18-06-2026

Inwerkingtreding:
18-06-2026

18.2 Wat is de winst- en verliesrekening o.b.v. Grootboek?

Concepten

Relaties

Eigenschappen

SPARQL query

Code gekopieerd

...

Kopieer naar klembord

1# Indicator: Zorgkantoren 18.2.0 - Complete versie met R en S totalen 
2# Parameters: ?startperiode, ?eindperiode
3# Ontologie: versie 3.0.0 of nieuwer
4# 
5# Deze query berekent de winst- en verliesrekening obv Prismant of RGS grootboekrubrieken.
6# Structuur: 3 delen via UNION die alle jaarrekeningposten + subtotalen genereren
7
8PREFIX onz-fin: <http://purl.org/ozo/onz-fin#>
9PREFIX onz-g: <http://purl.org/ozo/onz-g#>
10PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
11
12SELECT
13    ?jaarrekeningpost
14    (IF(SUM(?heeftData)>0, SUM(?bedrag_rubriek), "Niet beschikbaar") AS ?bedrag)
15WHERE
16{
17    {
18        # ================================================================
19        # DEEL 1: Berekening eindtotalen P, Q, R, S uit ruwe grootboekdata
20        ## deze berekening lijkt misschien overbodig omdat je ook de subposten uit deel 2 zou kunnen optellen, 
21        ## alleen die kunnen theoretisch leeg zijn wat tot reken problemen leidt. Vandaar deze pragmatische keuze
22        # ================================================================
23        {
24            # Bereken alle componentbedragen in één database scan voor performance
25            SELECT 
26                (SUM(?p_bedrag) AS ?p_totaal)      # P Som der bedrijfsopbrengsten
27                (SUM(?q_bedrag) AS ?q_totaal)      # Q Som der bedrijfslasten
28                (SUM(?r_bedrag) AS ?r_totaal)  # R.I Opbrengst van vorderingen die tot de vaste activa behoren en van effecten
29                (SUM(?s_bedrag) AS ?s_totaal)  # S.I Belastingen
30            
31                (SUM(?p_flag) AS ?p_has_data)
32                (SUM(?q_flag) AS ?q_has_data)
33                (SUM(?r_flag) AS ?r_has_data)
34                (SUM(?s_flag) AS ?s_has_data)
35            WHERE {
36                   #BIND("2024-01-01"^^xsd:date AS ?startperiode)
37                   #BIND("2024-12-31"^^xsd:date AS ?eindperiode)
38               
39                # Koppel grootboekposten aan rubrieken binnen meetperiode
40                ?grootboek_post a onz-fin:Grootboekpost ;
41                    onz-g:partOf ?rubriek ;
42                    onz-g:hasDate ?datum ;
43                    onz-fin:heeftGeldBedrag ?geld_bedrag .
44
45                # Match directe ouder: Grootboekrekening (RGS) of Grootboekrubriek (Prismant)
46                {
47                    { ?rubriek a onz-fin:Grootboekrekening }
48                    UNION
49                    { ?rubriek a onz-fin:Grootboekrubriek }
50                }
51                # Anti-dubbeltelling: houd alleen het bladniveau (geen transitive ancestors)
52                FILTER NOT EXISTS {
53                    ?grootboek_post onz-g:partOf ?child .
54                    ?child onz-g:partOf ?rubriek .
55                    FILTER(?child != ?rubriek)
56                    { { ?child a onz-fin:Grootboekrekening } UNION { ?child a onz-fin:Grootboekrubriek } }
57                }
58                FILTER(STRSTARTS(STR(?rubriek), STR(onz-fin:)))
59                BIND(STRAFTER(STR(?rubriek), STR(onz-fin:)) AS ?rubriekCode)
60
61                FILTER (?datum >= ?startperiode && ?datum <= ?eindperiode)
62
63                # In deel 2 worden de subposten pas berekend, hier alleen nog op letter niveau
64
65                # --- P: Bedragen voor eindtotaalberekening ---
66                # Prismant: P.I=81, P.IV=82/83/89/919/920/930
67                # RGS: P.I=WOmz/WRev/WRvi/WRgr/WWvv/WNoa/WLbe/WBat, P.II = WWiv minus WWivGvp, III=WWivGvp, P.IV=WOvb
68                # voor de som P volstaat het om WWiv hier te zetten want zo wordt WWivGvp ook maar 1x geteld.
69                BIND(
70                    IF(
71                        STRSTARTS(?rubriekCode, "81") ||
72                        STRSTARTS(?rubriekCode, "82") ||
73                        STRSTARTS(?rubriekCode, "83") ||
74                        STRSTARTS(?rubriekCode, "89") ||
75                        STRSTARTS(?rubriekCode, "919") ||
76                        STRSTARTS(?rubriekCode, "920") ||
77                        STRSTARTS(?rubriekCode, "930") ||
78                        STRSTARTS(?rubriekCode, "WOmz") ||
79                        STRSTARTS(?rubriekCode, "WRev") ||
80                        STRSTARTS(?rubriekCode, "WRvi") ||
81                        STRSTARTS(?rubriekCode, "WRgr") ||
82                        STRSTARTS(?rubriekCode, "WWvv") ||
83                        STRSTARTS(?rubriekCode, "WNoa") ||
84                        STRSTARTS(?rubriekCode, "WLbe") ||
85                        STRSTARTS(?rubriekCode, "WBat") ||
86                        STRSTARTS(?rubriekCode, "WWiv") ||
87                        STRSTARTS(?rubriekCode, "WOvb"),
88                        ?geld_bedrag, 0) AS ?p_bedrag
89                )
90
91                # --- Q: Diverse kostenrubrieken ---
92                # Q.I RGS: WKpr minus WKprKuw
93                # Q.II: 417/418 (Kosten uitbesteed werk en andere externe kosten), RGS: WKprKuw
94                # Q.III: 411-419 (Lonen en salarissen), RGS: WPer minus WPerSol minus WPerPen
95                # Q.IV: 420/4221/4223-4225/4229 (Sociale lasten), RGS: WPerSol
96                # Q.V: 4226 (Afschrijvingen), RGS: WPerPen
97                # Q.VI: 480-484 (Afschrijvingen op immateriële vaste activa en materiële vaste activa), RGS: WAfs
98                # Q.VII: RGS: WWvi
99                # Q.VIII: RGS: WBwv
100                # Q.IX: 423/43-47/486/489/905/911-915/921/931 (Overige bedrijfskosten), RGS: WBed/WOok/WKol/WVkf/WAkf
101                # ook hier volstaat het voor de som van Q om alleen WPer te noemen zodat WPerSol en WPerPen niet dubbel geteld worden
102                BIND(
103                    IF(
104                        STRSTARTS(?rubriekCode, "417") ||
105                        STRSTARTS(?rubriekCode, "418") ||
106                        STRSTARTS(?rubriekCode, "411") ||
107                        STRSTARTS(?rubriekCode, "412") ||
108                        STRSTARTS(?rubriekCode, "413") ||
109                        STRSTARTS(?rubriekCode, "414") ||
110                        STRSTARTS(?rubriekCode, "415") ||
111                        STRSTARTS(?rubriekCode, "416") ||
112                        STRSTARTS(?rubriekCode, "419") ||
113                        STRSTARTS(?rubriekCode, "420") ||
114                        STRSTARTS(?rubriekCode, "4221") ||
115                        STRSTARTS(?rubriekCode, "4223") ||
116                        STRSTARTS(?rubriekCode, "4224") ||
117                        STRSTARTS(?rubriekCode, "4225") ||
118                        STRSTARTS(?rubriekCode, "4229") ||
119                        STRSTARTS(?rubriekCode, "4226") ||
120                        STRSTARTS(?rubriekCode, "480") ||
121                        STRSTARTS(?rubriekCode, "481") ||
122                        STRSTARTS(?rubriekCode, "482") ||
123                        STRSTARTS(?rubriekCode, "483") ||
124                        STRSTARTS(?rubriekCode, "484") ||
125                        STRSTARTS(?rubriekCode, "423") ||
126                        STRSTARTS(?rubriekCode, "43") ||
127                        STRSTARTS(?rubriekCode, "44") ||
128                        STRSTARTS(?rubriekCode, "45") ||
129                        STRSTARTS(?rubriekCode, "46") ||
130                        STRSTARTS(?rubriekCode, "47") ||
131                        STRSTARTS(?rubriekCode, "486") ||
132                        STRSTARTS(?rubriekCode, "489") ||
133                        STRSTARTS(?rubriekCode, "905") ||
134                        STRSTARTS(?rubriekCode, "911") ||
135                        STRSTARTS(?rubriekCode, "912") ||
136                        STRSTARTS(?rubriekCode, "913") ||
137                        STRSTARTS(?rubriekCode, "914") ||
138                        STRSTARTS(?rubriekCode, "915") ||
139                        STRSTARTS(?rubriekCode, "921") ||
140                        STRSTARTS(?rubriekCode, "931") ||
141                        STRSTARTS(?rubriekCode, "WKpr") ||
142                        STRSTARTS(?rubriekCode, "WPer") ||
143                        STRSTARTS(?rubriekCode, "WAfs") ||
144                        STRSTARTS(?rubriekCode, "WWvi") ||
145                        STRSTARTS(?rubriekCode, "WBwv") ||
146                        STRSTARTS(?rubriekCode, "WBed") ||
147                        STRSTARTS(?rubriekCode, "WOok") ||
148                        STRSTARTS(?rubriekCode, "WKol") ||
149                        STRSTARTS(?rubriekCode, "WVkf") ||
150                        STRSTARTS(?rubriekCode, "WAkf"),
151                        ?geld_bedrag, 0) AS ?q_bedrag
152                )
153                
154                # --- R: Resultaat voor belastingen ---
155                # Prismant: R.I=904, R.II=900, R.III=903, R.IV=485/901
156                # RGS: R.I=WOvt, R.II=WFbeRlm, R.III=WWfa/WVhe, R.IV=WFbe minus WFbeRlm
157                # voor de som R volstaat het om WFbe hier te zetten want zo wordt WFbeRlm ook maar 1x geteld.
158                BIND(
159                    IF(
160                        STRSTARTS(?rubriekCode, "904") ||
161                        STRSTARTS(?rubriekCode, "900") ||
162                        STRSTARTS(?rubriekCode, "903") ||
163                        STRSTARTS(?rubriekCode, "485") ||
164                        STRSTARTS(?rubriekCode, "901") ||
165                        STRSTARTS(?rubriekCode, "WOvt") ||
166                        STRSTARTS(?rubriekCode, "WWfa") ||
167                        STRSTARTS(?rubriekCode, "WVhe") ||
168                        STRSTARTS(?rubriekCode, "WFbe"),
169                        ?geld_bedrag, 0) AS ?r_bedrag
170                )
171                
172                # --- S: Belastingen ---
173                # Prismant: S.II=902
174                # RGS: S.I=WBel, S.II=WRed/WAad
175                BIND(
176                    IF(
177                        STRSTARTS(?rubriekCode, "902") ||
178                        STRSTARTS(?rubriekCode, "WBel") ||
179                        STRSTARTS(?rubriekCode, "WRed") ||
180                        STRSTARTS(?rubriekCode, "WAad"),
181                        ?geld_bedrag, 0) AS ?s_bedrag
182                )
183
184                
185                # --- Data detection flags: 1 als de grootboekpost bij het component hoort ---
186                BIND(IF(
187                    STRSTARTS(?rubriekCode, "81") || STRSTARTS(?rubriekCode, "82") || STRSTARTS(?rubriekCode, "83") ||
188                    STRSTARTS(?rubriekCode, "89") || STRSTARTS(?rubriekCode, "919") || STRSTARTS(?rubriekCode, "920") ||
189                    STRSTARTS(?rubriekCode, "930") || STRSTARTS(?rubriekCode, "WOmz") || STRSTARTS(?rubriekCode, "WRev") ||
190                    STRSTARTS(?rubriekCode, "WRvi") || STRSTARTS(?rubriekCode, "WRgr") || STRSTARTS(?rubriekCode, "WWvv") ||
191                    STRSTARTS(?rubriekCode, "WNoa") || STRSTARTS(?rubriekCode, "WLbe") || STRSTARTS(?rubriekCode, "WBat") ||
192                    STRSTARTS(?rubriekCode, "WWiv") || STRSTARTS(?rubriekCode, "WOvb"),
193                    1, 0) AS ?p_flag)
194                BIND(IF(
195                    STRSTARTS(?rubriekCode, "417") || STRSTARTS(?rubriekCode, "418") ||
196                    STRSTARTS(?rubriekCode, "411") || STRSTARTS(?rubriekCode, "412") || STRSTARTS(?rubriekCode, "413") ||
197                    STRSTARTS(?rubriekCode, "414") || STRSTARTS(?rubriekCode, "415") || STRSTARTS(?rubriekCode, "416") ||
198                    STRSTARTS(?rubriekCode, "419") || STRSTARTS(?rubriekCode, "420") || STRSTARTS(?rubriekCode, "4221") ||
199                    STRSTARTS(?rubriekCode, "4223") || STRSTARTS(?rubriekCode, "4224") || STRSTARTS(?rubriekCode, "4225") ||
200                    STRSTARTS(?rubriekCode, "4229") || STRSTARTS(?rubriekCode, "4226") ||
201                    STRSTARTS(?rubriekCode, "480") || STRSTARTS(?rubriekCode, "481") || STRSTARTS(?rubriekCode, "482") ||
202                    STRSTARTS(?rubriekCode, "483") || STRSTARTS(?rubriekCode, "484") ||
203                    STRSTARTS(?rubriekCode, "423") || STRSTARTS(?rubriekCode, "43") || STRSTARTS(?rubriekCode, "44") ||
204                    STRSTARTS(?rubriekCode, "45") || STRSTARTS(?rubriekCode, "46") || STRSTARTS(?rubriekCode, "47") ||
205                    STRSTARTS(?rubriekCode, "486") || STRSTARTS(?rubriekCode, "489") || STRSTARTS(?rubriekCode, "905") ||
206                    STRSTARTS(?rubriekCode, "911") || STRSTARTS(?rubriekCode, "912") || STRSTARTS(?rubriekCode, "913") ||
207                    STRSTARTS(?rubriekCode, "914") || STRSTARTS(?rubriekCode, "915") || STRSTARTS(?rubriekCode, "921") ||
208                    STRSTARTS(?rubriekCode, "931") || STRSTARTS(?rubriekCode, "WKpr") || STRSTARTS(?rubriekCode, "WPer") ||
209                    STRSTARTS(?rubriekCode, "WAfs") || STRSTARTS(?rubriekCode, "WWvi") || STRSTARTS(?rubriekCode, "WBwv") ||
210                    STRSTARTS(?rubriekCode, "WBed") || STRSTARTS(?rubriekCode, "WOok") || STRSTARTS(?rubriekCode, "WKol") ||
211                    STRSTARTS(?rubriekCode, "WVkf") || STRSTARTS(?rubriekCode, "WAkf"),
212                    1, 0) AS ?q_flag)
213                BIND(IF(
214                        STRSTARTS(?rubriekCode, "904") ||
215                        STRSTARTS(?rubriekCode, "900") ||
216                        STRSTARTS(?rubriekCode, "903") ||
217                        STRSTARTS(?rubriekCode, "485") ||
218                        STRSTARTS(?rubriekCode, "901") ||
219                        STRSTARTS(?rubriekCode, "WOvt") ||
220                        STRSTARTS(?rubriekCode, "WWfa") ||
221                        STRSTARTS(?rubriekCode, "WVhe") ||
222                        STRSTARTS(?rubriekCode, "WFbe"),
223                        1, 0) AS ?r_flag)
224                BIND(IF(
225                        STRSTARTS(?rubriekCode, "WBel") ||
226                        STRSTARTS(?rubriekCode, "902") ||
227                        STRSTARTS(?rubriekCode, "WRed") ||
228                        STRSTARTS(?rubriekCode, "WAad"),
229                        1, 0) AS ?s_flag)
230                
231            }
232        }
233
234        # Genereer eindtotalen met berekende formules
235        VALUES (?eindtotaal_type ?jaarrekeningpost) {
236            (1 "P Som der bedrijfsopbrengsten")  # P totaal
237            (2 "Q Som der bedrijfslasten")       # Q totaal
238            (3 "R Resultaat voor belastingen")  # P + Q + R
239            (4 "S Resultaat na belastingen")    # R + S
240        }
241		
242        # Tel de bedragen op, als er geen data is gebruik dan nul 
243        BIND(
244          IF(?eindtotaal_type = 1, COALESCE(?p_totaal, 0), 
245          IF(?eindtotaal_type = 2, COALESCE(?q_totaal, 0), 
246          IF(?eindtotaal_type = 3, COALESCE(?p_totaal, 0) + COALESCE(?q_totaal, 0) + COALESCE(?r_totaal, 0), 
247          IF(?eindtotaal_type = 4, COALESCE(?p_totaal, 0) + COALESCE(?q_totaal, 0) + COALESCE(?r_totaal, 0) + 				COALESCE(?s_totaal, 0), 
248          0)))) AS ?bedrag_rubriek
249        )
250        
251        BIND(
252          IF(?eindtotaal_type = 1, ?p_has_data,
253          IF(?eindtotaal_type = 2, ?q_has_data,
254          IF(?eindtotaal_type = 3, ?p_has_data + ?q_has_data + ?r_has_data,
255          IF(?eindtotaal_type = 4, ?p_has_data + ?q_has_data + ?r_has_data + ?s_has_data,
256          0)))) AS ?heeftData
257        )
258        
259    }
260    UNION
261{
262    # ========================================================================
263    # DEEL 2: Individuele jaarrekeningposten uit grootboekdata
264    ## Inclusief een oplossing om lege posten als niet bestaand weer te geven.
265    ## In dit geval via heeftData = 0 en dan in de buitenste select dit weer te geven met een string
266    # Werkt voor Prismant én RGS
267    # ========================================================================
268    {
269        SELECT
270            ?jaarrekeningpost
271            ?bedrag_rubriek
272            ?heeftData
273        WHERE {
274            {
275                SELECT
276                    (SUM(?p_i_bedrag) AS ?p_i_totaal)
277                    (SUM(?p_ii_plus_bedrag) AS ?p_ii_plus_totaal)
278                    (SUM(?p_ii_min_bedrag) AS ?p_ii_min_totaal)
279                    (SUM(?p_iii_bedrag) AS ?p_iii_totaal)
280                    (SUM(?p_iv_bedrag) AS ?p_iv_totaal)
281
282                    (SUM(?q_i_plus_bedrag) AS ?q_i_plus_totaal)
283                    (SUM(?q_i_min_bedrag) AS ?q_i_min_totaal)
284                    (SUM(?q_ii_bedrag) AS ?q_ii_totaal)
285                    (SUM(?q_iii_bedrag) AS ?q_iii_totaal)
286                    (SUM(?q_iii_min_bedrag) AS ?q_iii_min_totaal)
287                    (SUM(?q_iv_bedrag) AS ?q_iv_totaal)
288                    (SUM(?q_v_bedrag) AS ?q_v_totaal)
289                    (SUM(?q_vi_bedrag) AS ?q_vi_totaal)
290                    (SUM(?q_vii_bedrag) AS ?q_vii_totaal)
291                    (SUM(?q_viii_bedrag) AS ?q_viii_totaal)
292                    (SUM(?q_ix_bedrag) AS ?q_ix_totaal)
293
294                    (SUM(?r_i_bedrag) AS ?r_i_totaal)
295                    (SUM(?r_ii_bedrag) AS ?r_ii_totaal)
296                    (SUM(?r_iii_bedrag) AS ?r_iii_totaal)
297                    (SUM(?r_iv_plus_bedrag) AS ?r_iv_plus_totaal)
298                    (SUM(?r_iv_min_bedrag) AS ?r_iv_min_totaal)
299
300                    (SUM(?s_i_bedrag) AS ?s_i_totaal)
301                    (SUM(?s_ii_bedrag) AS ?s_ii_totaal)
302
303                    (SUM(?p_i_flag) AS ?p_i_has_data)
304                    (SUM(?p_ii_flag) AS ?p_ii_has_data)
305                    (SUM(?p_iii_flag) AS ?p_iii_has_data)
306                    (SUM(?p_iv_flag) AS ?p_iv_has_data)
307                    (SUM(?q_i_flag) AS ?q_i_has_data)
308                    (SUM(?q_ii_flag) AS ?q_ii_has_data)
309                    (SUM(?q_iii_flag) AS ?q_iii_has_data)
310                    (SUM(?q_iv_flag) AS ?q_iv_has_data)
311                    (SUM(?q_v_flag) AS ?q_v_has_data)
312                    (SUM(?q_vi_flag) AS ?q_vi_has_data)
313                    (SUM(?q_vii_flag) AS ?q_vii_has_data)
314                    (SUM(?q_viii_flag) AS ?q_viii_has_data)
315                    (SUM(?q_ix_flag) AS ?q_ix_has_data)
316                    (SUM(?r_i_flag) AS ?r_i_has_data)
317                    (SUM(?r_ii_flag) AS ?r_ii_has_data)
318                    (SUM(?r_iii_flag) AS ?r_iii_has_data)
319                    (SUM(?r_iv_flag) AS ?r_iv_has_data)
320                    (SUM(?s_i_flag) AS ?s_i_has_data)
321                    (SUM(?s_ii_flag) AS ?s_ii_has_data)
322                WHERE {
323                      #BIND("2024-01-01"^^xsd:date AS ?startperiode)
324                   	  #BIND("2024-12-31"^^xsd:date AS ?eindperiode)
325
326                    ?grootboek_post a onz-fin:Grootboekpost ;
327                        onz-g:partOf ?rubriek ;
328                        onz-g:hasDate ?datum ;
329                        onz-fin:heeftGeldBedrag ?geld_bedrag .
330
331                    # Match directe ouder: Grootboekrekening (RGS) of Grootboekrubriek (Prismant)
332                    {
333                        { ?rubriek a onz-fin:Grootboekrekening }
334                        UNION
335                        { ?rubriek a onz-fin:Grootboekrubriek }
336                    }
337                    # Anti-dubbeltelling: houd alleen het bladniveau (geen transitive ancestors)
338                    FILTER NOT EXISTS {
339                        ?grootboek_post onz-g:partOf ?child .
340                        ?child onz-g:partOf ?rubriek .
341                        FILTER(?child != ?rubriek)
342                        { { ?child a onz-fin:Grootboekrekening } UNION { ?child a onz-fin:Grootboekrubriek } }
343                    }
344                    FILTER(STRSTARTS(STR(?rubriek), STR(onz-fin:)))
345                    BIND(STRAFTER(STR(?rubriek), STR(onz-fin:)) AS ?rubriekCode)
346
347                    FILTER (?datum >= ?startperiode && ?datum <= ?eindperiode)
348
349                    # -----------------------------
350                    # P
351                    # -----------------------------
352                    BIND(
353                        IF(
354                            STRSTARTS(?rubriekCode, "81") ||
355                            STRSTARTS(?rubriekCode, "WOmz") ||
356                            STRSTARTS(?rubriekCode, "WRev") ||
357                            STRSTARTS(?rubriekCode, "WRvi") ||
358                            STRSTARTS(?rubriekCode, "WRgr") ||
359                            STRSTARTS(?rubriekCode, "WWvv") ||
360                            STRSTARTS(?rubriekCode, "WNoa") ||
361                            STRSTARTS(?rubriekCode, "WLbe") ||
362                            STRSTARTS(?rubriekCode, "WBat"),
363                            ?geld_bedrag, 0
364                        ) AS ?p_i_bedrag
365                    )
366
367                    BIND(IF(STRSTARTS(?rubriekCode, "WWiv"), ?geld_bedrag, 0) AS ?p_ii_plus_bedrag)
368                    BIND(IF(STRSTARTS(?rubriekCode, "WWivGpv"), ?geld_bedrag, 0) AS ?p_ii_min_bedrag)
369                    
370                        BIND(IF(STRSTARTS(?rubriekCode, "WWivGpv"), ?geld_bedrag, 0) AS ?p_iii_bedrag)
371
372                    BIND(
373                        IF(
374                            STRSTARTS(?rubriekCode, "82") ||
375                            STRSTARTS(?rubriekCode, "83") ||
376                            STRSTARTS(?rubriekCode, "89") ||
377                            STRSTARTS(?rubriekCode, "919") ||
378                            STRSTARTS(?rubriekCode, "920") ||
379                            STRSTARTS(?rubriekCode, "930") ||
380                            STRSTARTS(?rubriekCode, "WOvb"),
381                            ?geld_bedrag, 0
382                        ) AS ?p_iv_bedrag
383                    )
384
385                    # -----------------------------
386                    # Q
387                    # -----------------------------
388                    BIND(IF(STRSTARTS(?rubriekCode, "WKpr"), ?geld_bedrag, 0) AS ?q_i_plus_bedrag)
389                    BIND(IF(STRSTARTS(?rubriekCode, "WKprKuw"), ?geld_bedrag, 0) AS ?q_i_min_bedrag)
390
391                    BIND(
392                        IF(
393                            STRSTARTS(?rubriekCode, "417") ||
394                            STRSTARTS(?rubriekCode, "418") ||
395                            STRSTARTS(?rubriekCode, "WKprKuw"),
396                            ?geld_bedrag, 0
397                        ) AS ?q_ii_bedrag
398                    )
399
400                    BIND(
401                        IF(
402                            STRSTARTS(?rubriekCode, "411") ||
403                            STRSTARTS(?rubriekCode, "412") ||
404                            STRSTARTS(?rubriekCode, "413") ||
405                            STRSTARTS(?rubriekCode, "414") ||
406                            STRSTARTS(?rubriekCode, "415") ||
407                            STRSTARTS(?rubriekCode, "416") ||
408                            STRSTARTS(?rubriekCode, "419") ||
409                            STRSTARTS(?rubriekCode, "WPer"),
410                            ?geld_bedrag, 0
411                        ) AS ?q_iii_bedrag   
412                    )
413                    
414                   BIND(
415                        IF(STRSTARTS(?rubriekCode, "WPerSol")  ||
416                           STRSTARTS(?rubriekCode, "WPerPen") , ?geld_bedrag, 0)
417                        AS ?q_iii_min_bedrag
418                    )
419
420
421                    BIND(
422                        IF(
423                            STRSTARTS(?rubriekCode, "420") ||
424                            STRSTARTS(?rubriekCode, "4221") ||
425                            STRSTARTS(?rubriekCode, "4223") ||
426                            STRSTARTS(?rubriekCode, "4224") ||
427                            STRSTARTS(?rubriekCode, "4225") ||
428                            STRSTARTS(?rubriekCode, "4229") ||
429                            STRSTARTS(?rubriekCode, "WPerSol"),
430                            ?geld_bedrag, 0
431                        ) AS ?q_iv_bedrag
432                    )
433                   
434                        
435                	BIND(
436                        IF(
437                            STRSTARTS(?rubriekCode, "4226") ||
438                            STRSTARTS(?rubriekCode, "WPerPen"),
439                            ?geld_bedrag, 0
440                        ) AS ?q_v_bedrag
441                    )
442                        
443
444                    BIND(
445                        IF(
446                            STRSTARTS(?rubriekCode, "480") ||
447                            STRSTARTS(?rubriekCode, "481") ||
448                            STRSTARTS(?rubriekCode, "482") ||
449                            STRSTARTS(?rubriekCode, "483") ||
450                            STRSTARTS(?rubriekCode, "484") ||
451                            STRSTARTS(?rubriekCode, "WAfs"),
452                            ?geld_bedrag, 0
453                        ) AS ?q_vi_bedrag
454                    )
455
456                    BIND(IF(STRSTARTS(?rubriekCode, "WWvi"), ?geld_bedrag, 0) AS ?q_vii_bedrag)
457                    BIND(IF(STRSTARTS(?rubriekCode, "WBwv"), ?geld_bedrag, 0) AS ?q_viii_bedrag)
458
459                    BIND(
460                        IF(
461                            STRSTARTS(?rubriekCode, "423") ||
462                            STRSTARTS(?rubriekCode, "43") ||
463                            STRSTARTS(?rubriekCode, "44") ||
464                            STRSTARTS(?rubriekCode, "45") ||
465                            STRSTARTS(?rubriekCode, "46") ||
466                            STRSTARTS(?rubriekCode, "47") ||
467                            STRSTARTS(?rubriekCode, "486") ||
468                            STRSTARTS(?rubriekCode, "489") ||
469                            STRSTARTS(?rubriekCode, "905") ||
470                            STRSTARTS(?rubriekCode, "911") ||
471                            STRSTARTS(?rubriekCode, "912") ||
472                            STRSTARTS(?rubriekCode, "913") ||
473                            STRSTARTS(?rubriekCode, "914") ||
474                            STRSTARTS(?rubriekCode, "915") ||
475                            STRSTARTS(?rubriekCode, "921") ||
476                            STRSTARTS(?rubriekCode, "931") ||
477                            STRSTARTS(?rubriekCode, "WBed") ||
478                            STRSTARTS(?rubriekCode, "WOok") ||
479                            STRSTARTS(?rubriekCode, "WKol") ||
480                            STRSTARTS(?rubriekCode, "WVkf") ||
481                            STRSTARTS(?rubriekCode, "WAkf"),
482                            ?geld_bedrag, 0
483                        ) AS ?q_ix_bedrag
484                    )
485
486                    # -----------------------------
487                    # R
488                    # -----------------------------
489                    BIND(
490                        IF(
491                            STRSTARTS(?rubriekCode, "904") ||
492                            STRSTARTS(?rubriekCode, "WOvt"),
493                            ?geld_bedrag, 0
494                        ) AS ?r_i_bedrag
495                    )
496
497                    BIND(
498                        IF(
499                            STRSTARTS(?rubriekCode, "900") ||
500                            STRSTARTS(?rubriekCode, "WFbeRlm"),
501                            ?geld_bedrag, 0
502                        ) AS ?r_ii_bedrag
503                    )
504
505                    BIND(
506                        IF(
507                            STRSTARTS(?rubriekCode, "903") ||
508                            STRSTARTS(?rubriekCode, "WWfa") ||
509                            STRSTARTS(?rubriekCode, "WVhe"),
510                            ?geld_bedrag, 0
511                        ) AS ?r_iii_bedrag
512                    )
513
514                    BIND(IF(STRSTARTS(?rubriekCode, "485") || STRSTARTS(?rubriekCode, "901") || STRSTARTS(?rubriekCode, "WFbe"), ?geld_bedrag, 0) AS ?r_iv_plus_bedrag)
515                    BIND(IF(STRSTARTS(?rubriekCode, "WFbeRlm"), ?geld_bedrag, 0) AS ?r_iv_min_bedrag)
516
517                    # -----------------------------
518                    # S
519                    # -----------------------------
520                    BIND(IF(STRSTARTS(?rubriekCode, "WBel"), ?geld_bedrag, 0) AS ?s_i_bedrag)
521
522                    BIND(
523                        IF(
524                            STRSTARTS(?rubriekCode, "902") ||
525                            STRSTARTS(?rubriekCode, "WRed") ||
526                            STRSTARTS(?rubriekCode, "WAad"),
527                            ?geld_bedrag, 0
528                        ) AS ?s_ii_bedrag
529                    )
530
531                    # --- Data detection flags: 1 als de grootboekpost bij het component hoort ---
532                    BIND(IF(
533                        STRSTARTS(?rubriekCode, "81") || STRSTARTS(?rubriekCode, "WOmz") ||
534                        STRSTARTS(?rubriekCode, "WRev") || STRSTARTS(?rubriekCode, "WRvi") ||
535                        STRSTARTS(?rubriekCode, "WRgr") || STRSTARTS(?rubriekCode, "WWvv") ||
536                        STRSTARTS(?rubriekCode, "WNoa") || STRSTARTS(?rubriekCode, "WLbe") ||
537                        STRSTARTS(?rubriekCode, "WBat"),
538                        1, 0) AS ?p_i_flag)
539                    BIND(IF(STRSTARTS(?rubriekCode, "WWiv"), 1, 0) AS ?p_ii_flag)
540                    BIND(IF(STRSTARTS(?rubriekCode, "WWivGpv"), 1, 0) AS ?p_iii_flag)
541                    BIND(IF(
542                        STRSTARTS(?rubriekCode, "82") || STRSTARTS(?rubriekCode, "83") ||
543                        STRSTARTS(?rubriekCode, "89") || STRSTARTS(?rubriekCode, "919") ||
544                        STRSTARTS(?rubriekCode, "920") || STRSTARTS(?rubriekCode, "930") ||
545                        STRSTARTS(?rubriekCode, "WOvb"),
546                        1, 0) AS ?p_iv_flag)
547                    BIND(IF(STRSTARTS(?rubriekCode, "WKpr"), 1, 0) AS ?q_i_flag)
548                    BIND(IF(
549                        STRSTARTS(?rubriekCode, "417") || STRSTARTS(?rubriekCode, "418") ||
550                        STRSTARTS(?rubriekCode, "WKprKuw"),
551                        1, 0) AS ?q_ii_flag)
552                    BIND(IF(
553                        STRSTARTS(?rubriekCode, "411") || STRSTARTS(?rubriekCode, "412") ||
554                        STRSTARTS(?rubriekCode, "413") || STRSTARTS(?rubriekCode, "414") ||
555                        STRSTARTS(?rubriekCode, "415") || STRSTARTS(?rubriekCode, "416") ||
556                        STRSTARTS(?rubriekCode, "419") || STRSTARTS(?rubriekCode, "WPer"),
557                        1, 0) AS ?q_iii_flag)
558                    BIND(IF(
559                        STRSTARTS(?rubriekCode, "420") || STRSTARTS(?rubriekCode, "4221") ||
560                        STRSTARTS(?rubriekCode, "4223") || STRSTARTS(?rubriekCode, "4224") ||
561                        STRSTARTS(?rubriekCode, "4225") || STRSTARTS(?rubriekCode, "4229") ||
562                        STRSTARTS(?rubriekCode, "WPerSol"),
563                        1, 0) AS ?q_iv_flag)
564                    BIND(IF(
565                        STRSTARTS(?rubriekCode, "4226") || STRSTARTS(?rubriekCode, "WPerPen"),
566                        1, 0) AS ?q_v_flag)
567                    BIND(IF(
568                        STRSTARTS(?rubriekCode, "480") || STRSTARTS(?rubriekCode, "481") ||
569                        STRSTARTS(?rubriekCode, "482") || STRSTARTS(?rubriekCode, "483") ||
570                        STRSTARTS(?rubriekCode, "484") || STRSTARTS(?rubriekCode, "WAfs"),
571                        1, 0) AS ?q_vi_flag)
572                    BIND(IF(STRSTARTS(?rubriekCode, "WWvi"), 1, 0) AS ?q_vii_flag)
573                    BIND(IF(STRSTARTS(?rubriekCode, "WBwv"), 1, 0) AS ?q_viii_flag)
574                    BIND(IF(
575                        STRSTARTS(?rubriekCode, "423") || STRSTARTS(?rubriekCode, "43") ||
576                        STRSTARTS(?rubriekCode, "44") || STRSTARTS(?rubriekCode, "45") ||
577                        STRSTARTS(?rubriekCode, "46") || STRSTARTS(?rubriekCode, "47") ||
578                        STRSTARTS(?rubriekCode, "486") || STRSTARTS(?rubriekCode, "489") ||
579                        STRSTARTS(?rubriekCode, "905") || STRSTARTS(?rubriekCode, "911") ||
580                        STRSTARTS(?rubriekCode, "912") || STRSTARTS(?rubriekCode, "913") ||
581                        STRSTARTS(?rubriekCode, "914") || STRSTARTS(?rubriekCode, "915") ||
582                        STRSTARTS(?rubriekCode, "921") || STRSTARTS(?rubriekCode, "931") ||
583                        STRSTARTS(?rubriekCode, "WBed") || STRSTARTS(?rubriekCode, "WOok") ||
584                        STRSTARTS(?rubriekCode, "WKol") || STRSTARTS(?rubriekCode, "WVkf") ||
585                        STRSTARTS(?rubriekCode, "WAkf"),
586                        1, 0) AS ?q_ix_flag)
587                    BIND(IF(STRSTARTS(?rubriekCode, "904") || STRSTARTS(?rubriekCode, "WOvt"), 1, 0) AS ?r_i_flag)
588                    BIND(IF(STRSTARTS(?rubriekCode, "900") || STRSTARTS(?rubriekCode, "WFbeRlm"), 1, 0) AS ?r_ii_flag)
589                    BIND(IF(STRSTARTS(?rubriekCode, "903") || STRSTARTS(?rubriekCode, "WWfa") || STRSTARTS(?rubriekCode, "WVhe"), 1, 0) AS ?r_iii_flag)
590                    BIND(IF(STRSTARTS(?rubriekCode, "485") || STRSTARTS(?rubriekCode, "901") || STRSTARTS(?rubriekCode, "WFbe"), 1, 0) AS ?r_iv_flag)
591                    BIND(IF(STRSTARTS(?rubriekCode, "WBel"), 1, 0) AS ?s_i_flag)
592                    BIND(IF(STRSTARTS(?rubriekCode, "902") || STRSTARTS(?rubriekCode, "WRed") || STRSTARTS(?rubriekCode, "WAad"), 1, 0) AS ?s_ii_flag)
593                }
594            }
595
596            VALUES (?detail_type ?jaarrekeningpost) {
597                (1  "P.I Netto omzet")
598                (2  "P.II Wijziging in voorraden gereed product en onderhanden werk ten opzichte van de voorafgaande balansdatum")
599                (3  "P.III Geactiveerde productie voor het eigen bedrijf")
600                (4  "P.IV Overige bedrijfsopbrengsten")
601                (5  "Q.I Kosten van grond- en hulpstoffen")
602                (6  "Q.II Kosten uitbesteed werk en andere externe kosten")
603                (7  "Q.III Lonen en salarissen")
604                (8  "Q.IV Sociale lasten")
605                (9  "Q.V Pensioenlasten")
606                (10 "Q.VI Afschrijvingen op immateriële vaste activa en materiële vaste activa")
607                (11 "Q.VII Overige waardevermindering immateriële vaste activa en materiële vaste activa")
608                (12 "Q.VIII Bijzondere waardevermindering van vlottende activa")
609                (13 "Q.IX Overige bedrijfskosten")
610                (14 "R.I Opbrengst van vorderingen die tot de vaste activa behoren en van effecten")
611                (15 "R.II Andere rentebaten en soortgelijke opbrengsten")
612                (16 "R.III Waardeverandering van vorderingen die tot de vaste activa behoren en van effecten")
613                (17 "R.IV Rentelasten en soortgelijke kosten")
614                (18 "S.I Belastingen")
615                (19 "S.II Aandeel in winst/verlies van ondernemingen waarin wordt deelgenomen")
616            }
617
618            BIND(
619                IF(?detail_type = 1, ?p_i_totaal,
620                IF(?detail_type = 2, ?p_ii_plus_totaal - ?p_ii_min_totaal,
621                IF(?detail_type = 3, ?p_iii_totaal,
622                IF(?detail_type = 4, ?p_iv_totaal,
623                IF(?detail_type = 5, ?q_i_plus_totaal - ?q_i_min_totaal,
624                IF(?detail_type = 6, ?q_ii_totaal,                         
625                IF(?detail_type = 7, ?q_iii_totaal - ?q_iii_min_totaal  ,                         
626                IF(?detail_type = 8, ?q_iv_totaal,
627                IF(?detail_type = 9, ?q_v_totaal,
628                IF(?detail_type = 10, ?q_vi_totaal,
629                IF(?detail_type = 11, ?q_vii_totaal,
630                IF(?detail_type = 12, ?q_viii_totaal,
631                IF(?detail_type = 13, ?q_ix_totaal,
632                IF(?detail_type = 14, ?r_i_totaal,
633                IF(?detail_type = 15, ?r_ii_totaal,
634                IF(?detail_type = 16, ?r_iii_totaal,
635                IF(?detail_type = 17, ?r_iv_plus_totaal - ?r_iv_min_totaal,
636                IF(?detail_type = 18, ?s_i_totaal,
637                IF(?detail_type = 19, ?s_ii_totaal,
638                    0
639               )))))))))))))))))))
640                AS ?bedrag_rubriek
641            )
642
643            # Bepaal of er data beschikbaar is voor de individuele jaarrekeningpost
644            BIND(
645                IF(?detail_type = 1, IF(?p_i_has_data > 0, 1, 0),
646                IF(?detail_type = 2, IF(?p_ii_has_data > 0, 1, 0),
647                IF(?detail_type = 3, IF(?p_iii_has_data > 0, 1, 0),
648                IF(?detail_type = 4, IF(?p_iv_has_data > 0, 1, 0),
649                IF(?detail_type = 5, IF(?q_i_has_data > 0, 1, 0),
650                IF(?detail_type = 6, IF(?q_ii_has_data > 0, 1, 0),
651                IF(?detail_type = 7, IF(?q_iii_has_data > 0, 1, 0),
652                IF(?detail_type = 8, IF(?q_iv_has_data > 0, 1, 0),
653                IF(?detail_type = 9, IF(?q_v_has_data > 0, 1, 0),
654                IF(?detail_type = 10, IF(?q_vi_has_data > 0, 1, 0),
655                IF(?detail_type = 11, IF(?q_vii_has_data > 0, 1, 0),
656                IF(?detail_type = 12, IF(?q_viii_has_data > 0, 1, 0),
657                IF(?detail_type = 13, IF(?q_ix_has_data > 0, 1, 0),
658                IF(?detail_type = 14, IF(?r_i_has_data > 0, 1, 0),
659                IF(?detail_type = 15, IF(?r_ii_has_data > 0, 1, 0),
660                IF(?detail_type = 16, IF(?r_iii_has_data > 0, 1, 0),
661                IF(?detail_type = 17, IF(?r_iv_has_data > 0, 1, 0),
662                IF(?detail_type = 18, IF(?s_i_has_data > 0, 1, 0),
663                IF(?detail_type = 19, IF(?s_ii_has_data > 0, 1, 0),
664                0)))))))))))))))))))
665                AS ?heeftData
666            )
667        }
668    }
669}
670 
671	UNION
672    {
673        # =======================================================================
674        # DEEL 3: Volledige lijst van alle jaarrekeningposten 
675        # =======================================================================
676        BIND(0 AS ?bedrag_rubriek)
677        BIND(0 AS ?heeftData)  # Tijdens initieren is het nog onduidelijk of er data voor de rubriek aanwezig is
678        VALUES ?jaarrekeningpost {
679            # P: Som der bedrijfsopbrengsten
680            "P.I Netto omzet"
681            "P.II Wijziging in voorraden gereed product en onderhanden werk ten opzichte van de voorafgaande balansdatum"
682            "P.III Geactiveerde productie voor het eigen bedrijf"
683            "P.IV Overige bedrijfsopbrengsten"
684            "P Som der bedrijfsopbrengsten"
685            
686            # Q: Som der bedrijfslasten
687            "Q.I Kosten van grond- en hulpstoffen"
688            "Q.II Kosten uitbesteed werk en andere externe kosten"
689            "Q.III Lonen en salarissen"
690            "Q.IV Sociale lasten"
691            "Q.V Pensioenlasten"
692            "Q.VI Afschrijvingen op immateriële vaste activa en materiële vaste activa"
693            "Q.VII Overige waardevermindering immateriële vaste activa en materiële vaste activa"
694            "Q.VIII Bijzondere waardevermindering van vlottende activa"
695            "Q.IX Overige bedrijfskosten"
696            "Q Som der bedrijfslasten"
697            
698            # R: Financiële baten en lasten
699            "R.I Opbrengst van vorderingen die tot de vaste activa behoren en van effecten"
700            "R.II Andere rentebaten en soortgelijke opbrengsten"
701            "R.III Waardeverandering van vorderingen die tot de vaste activa behoren en van effecten"
702            "R.IV Rentelasten en soortgelijke kosten"
703            "R Resultaat voor belastingen"
704            
705            # S: Belastingen en resultaat deelnemingen
706            "S.I Belastingen"
707            "S.II Aandeel in winst/verlies van ondernemingen waarin wordt deelgenomen"
708            "S Resultaat na belastingen"
709        }
710    } }
711GROUP BY ?jaarrekeningpost
712ORDER BY ?jaarrekeningpost